package controllers;

import static controllers.Util.data;
import static java.lang.String.format;

import java.util.Date;
import java.util.List;

import models.Usuario;
import play.db.jpa.GenericModel;
import play.mvc.Before;
import play.mvc.Controller;

public class Usuarios extends Controller {

	@Before
	static void checkUser() {
		if (!Application.connected().isDefined()) {
			flash.error("Please log in first");
			Application.index();
		}
	}

	public static void formCadastroUsuario() {
		render();
	}

	public static void cadastrarUsuario(Usuario usuario, String dd, String mm,
			String yyyy) {

		final Date nasc = data(dd, mm, yyyy);

		usuario.pessoa.dataNascimento = nasc;
		usuario.ativo = true;
		usuario.pessoa.save();
		usuario.save();
		flash.success(format("O Usuário, %s foi cadastrado com sucesso!",
				usuario.pessoa.nome));
		formCadastroUsuario();
	}

	public static void buscarUsuarios(String parametro, String campo) {
		final List<Usuario> usuarios;
		if ("nome".equalsIgnoreCase(parametro)) {
			usuarios = Usuario.find(
					"select u from Usuario u where u.pessoa.nome like '"
							+ campo + "%' order by u.pessoa.nome").fetch();
		} else if ("cpf".equalsIgnoreCase(parametro)) {
			usuarios = Usuario
					.find("select u from Usuario a where u.pessoa.cpfTitular= ? order by u.pessoa.nome",
							campo).fetch();
		} else {
			usuarios = Usuario.findAll();
		}
		render(usuarios);
	}

	public static void formAtualizarUsuario(Long idUsuario, Long idPessoa) {
		final Usuario usuario = Usuario.findById(idUsuario);
		@SuppressWarnings("deprecation")
		final int dia = usuario.pessoa.dataNascimento.getDate();
		@SuppressWarnings("deprecation")
		final int mes = usuario.pessoa.dataNascimento.getMonth();
		@SuppressWarnings("deprecation")
		final int ano = usuario.pessoa.dataNascimento.getYear() + 1900;
		render(usuario, idUsuario, idPessoa, dia, mes, ano);
	}

	public static void atualizarUsuario(Usuario usuario, String dd, String mm,
			String yyyy) {
		final Date nasc = data(dd, mm, yyyy);
		usuario.pessoa.dataNascimento = nasc;
		usuario.pessoa.save();
		usuario.save();
		flash.success(format("O Usuário, %s foi atualizado com sucesso!",
				usuario.pessoa.nome));
		buscarUsuarios(null, null);
	}

	public static void ativar(Long id) {
		final Usuario usuario = Usuario.findById(id);
		usuario.ativo = !usuario.ativo;
		usuario.save();
		buscarUsuarios();
	}

	private static void buscarUsuarios() {
		buscarUsuarios(null, null);
	}

}
